#include <stdio.h>

int main()
{
    int *p;//定义了一个可以执行int类型地址的指针变量，名字叫p
    int a;//定义了一个int型的变量，名字叫a
    a = 1;
    p = &a;//把a的内存地址赋值给p
    printf("%p\n", p);//输出a的首个字节的地址
    *p = 10;//通过指针变量间接的访问a的值， *p代表指针指向变量的值，p代表指向变量的地址
    printf("a = %d\n", a);
    a = 100;
    printf("%d\n", *p);
    int b = 2;
    p = &b;//又指向了b的地址
    *p = 200;
    printf("b = %d\n", b);
//两个类型不相同的地址
//a 为int  *p1 为char
//强转只是从语法的角度把warning去掉，但不会改变编程运行的错误结果
    char *p1 = (char *)&a;
    a = 123456;
    *p1 = 0;
    printf("a = %d\n", a);

    void *p2;//可以指向任何类型的地址， void代表无类型
    return 0;

}

